/**
 * 
 */
package com.umariana.ClinicaVeterinaria.mundo;


import java.sql.SQLException;
import java.text.ParseException;
import java.util.ArrayList;

import com.umariana.ClinicaVeterinaria.Persistencia.ConsultaDao;
import com.umariana.ClinicaVeterinaria.Persistencia.CuentaDao;
import com.umariana.ClinicaVeterinaria.Persistencia.MascotaDao;
import com.umariana.ClinicaVeterinaria.Persistencia.PropietarioDao;

/**
 * @author Andres Javier Ovido
 * Clase Clinica
 */
public class Clinica
{

	/**
	 * lista de propietarios
	 */
	private ArrayList<Propietario> listaPropietarios;
	
	/**
	 * contructor de la clase clinica
	 * @throws SQLException 
	 * @throws ClassNotFoundException 
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 */
	public Clinica() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException 
	{
		PropietarioDao miPropietarioDao = new PropietarioDao();
		this.setListaPropietarios(miPropietarioDao.selectAllPropietarios());
		

	}
	
	/**
	 * agrega un propietario a la clinica
	 * @param identificacion identificacion del propietario
	 * @param nombres nombres del propietario
	 * @param apellidos apellidos del propietario
	 * @param direccion direccion del propietario
	 * @param telefono telefono del propietario
	 * @throws SQLException 
	 * @throws ClassNotFoundException 
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 */
	public void agregarPropietario(String identificacion, String nombres, String apellidos,
			String direccion, String telefono) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
	{
		Propietario nuevoPropietario = new Propietario(identificacion, nombres, apellidos, direccion, telefono);
		listaPropietarios.add(nuevoPropietario);
		
		PropietarioDao miPropietarioDao = new PropietarioDao();
		
		miPropietarioDao.insertPropietario(nuevoPropietario);
		
		
		listaPropietarios = miPropietarioDao.selectAllPropietarios();
		Cuenta cuentaNueva = new Cuenta(nuevoPropietario, 0);
		CuentaDao cdao = new CuentaDao();
		cdao.insertCuenta(cuentaNueva);
		
	}
	
	/**
	 * busca el propietario dado su Identificacion
	 * @param pIdentificacion identificacion del propietario a a buscar
	 * @return el propietario del lo contrario retorna null
	 */
	public Propietario buscarPropietario(String pIdentificacion)
	{
		for (int i = 0; i < listaPropietarios.size(); i++) 
		{
			Propietario miPropietario = (Propietario)listaPropietarios.get(i);
			if(miPropietario.getIdentificacion().equalsIgnoreCase(pIdentificacion))
			{
				return miPropietario;
			}
		}
		return null;
	}
	
	/**
	 * agregar una consulta a la clinica
	 * @param pIdentificacion identificacion del propietario
	 * @param fecha fecha de la consulta
	 * @param hora hora de la consulta
	 * @param nombreMascota nombre de la mascota
	 * @param motivo motivo de la consulta
	 * @throws ParseException 
	 * @throws SQLException 
	 * @throws ClassNotFoundException 
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 */
	public void agregarConsulta(String pIdentificacion,String fecha, String hora, String nombreMascota,
			String motivo) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
	{
		Propietario miPropietario = buscarPropietario(pIdentificacion);
		
		miPropietario.agregarConsulta(fecha, hora, nombreMascota, motivo);
		Consulta c = new Consulta(fecha, hora, nombreMascota, motivo);
		ConsultaDao miConDao = new ConsultaDao();
		miConDao.insertConsulta(c,pIdentificacion);
		agregarCargo(pIdentificacion);
		
	
	
	}
	
	/**
	 * agrega una mascota nueva a la clinica
	 * @param Identificacion identificacion de la persona a la cual se le agrega la mascota
	 * @param nombre nombre de la mascota
	 * @param edad edad de la mascota
	 * @param raza raza de la mascota
	 * @param especie especie de la mascota
	 * @throws SQLException 
	 * @throws ClassNotFoundException 
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 */
	public void agregarMascota(String Identificacion ,String nombre, int edad, String raza, String especie) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
	{
		
		Propietario miPropietario = buscarPropietario(Identificacion);
		miPropietario.agregarMascota(nombre, edad, raza, especie);
		Mascotas m = new Mascotas(nombre, edad, raza, especie);
		MascotaDao mascotaDao = new MascotaDao();
		
		mascotaDao.insertMascota(m,miPropietario.getIdentificacion());
		miPropietario.setMascotas(mascotaDao.selectAllMascotas(miPropietario.getIdentificacion()));
		
		
	}
	
	/**
	 * retorna la lista de mascotas que tiene un propietario en la clinica
	 * @param pIdentificacion identificacion del propietario
	 * @return la lista de las mascotas del propietario
	 */
	public ArrayList<Mascotas> darListadeMascotas(String pIdentificacion)
	{
		
		Propietario miPropietario = buscarPropietario(pIdentificacion);
		return miPropietario.getMascotas();	
	}
	
	/**
	 * retorna la lista de consultas de un propietario en la clinica
	 * @param pIdentificacion identificacion del propietario
	 * @return la lista de las consultas del propietario
	 */
	public ArrayList<Consulta> darListadeConsultas(String pIdentificacion)
	{
		Propietario miPropietario = buscarPropietario(pIdentificacion);
		return miPropietario.getConsultas();
	}
	
	/**
	 * agrega un cargo a la cuenta de un propietario
	 * @param Identificacion identificaion del propietario
	 * @throws SQLException 
	 * @throws ClassNotFoundException 
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 */
	public void agregarCargo(String Identificacion) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
	{
		Propietario p = buscarPropietario(Identificacion);
		p.agregarCargo(20000);
	}
	
	/**
	 * realiza un pago a la cuenta del propietario
	 * @param Identificacion identificaion del propietario
	 * @throws SQLException 
	 * @throws ClassNotFoundException 
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 */
	public void pagarFactura(String Identificacion,float pe) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
	{
		Propietario p = buscarPropietario(Identificacion);
		p.pagarCuenta(pe);
	}
	/**
	 * retorna la lista de propietarios
	 * @return
	 */
	public ArrayList<Propietario> getListaPropietarios() {
		return listaPropietarios;
	}

	/**
	 * cambia la lista de propietarios
	 * @param listaPropietarios
	 */
	public void setListaPropietarios(ArrayList<Propietario> listaPropietarios) {
		this.listaPropietarios = listaPropietarios;
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}
